// 使用页面跳转进度条插件
import NProgress from 'nprogress'; // progress bar
import 'nprogress/nprogress.css';
NProgress.configure({ showSpinner: false });

// 引入路由白名单
import {whiteRouters} from "@/config/globalConfig.ts";
// 引入用户store
import {useUserStore} from "@/store/modules/user.ts";
// 引入权限判断
import {hasPermission} from "@/utils/permission.ts";
// 引入登录页面路径
import {loginPageURL} from "@/config/globalConfig.ts"
import {RouteLocationNormalized} from "vue-router";

// 引入加密解密
import {encode} from "@/utils/utils.ts"

// 路由跳转前置拦截
export function beforeHook(to: RouteLocationNormalized) {
    // 进度条开始
    NProgress.start();
    const userStore = useUserStore();
    const isLogin = userStore.token;
    const encodeURL = encode(to.fullPath);
    // 跳转的路由不是登录路由 且 不在路由白名单上 也没登录 就跳转登录，其余判断权限
    if(to.path != loginPageURL && (!whiteRouters.includes(to.path) && !isLogin)) {
        return {path: loginPageURL, replace: true, query: {redirect: encodeURL}};
    }
    // 其余路由做权限判断
    else {
        // 当当前路由具有权限要做相应的权限判断
        if(to.meta && to.meta.hasOwnProperty("roles")) {
            // 判断用户是否具有权限
            if(!hasPermission(to.meta.roles as (string | string[])))
                return {path: "/403", query: {redirect: encodeURL}};
        }
    }
}

// 路由后置拦截
export function afterHook() {
    NProgress.done();
}

